package model

import (
	"gpt-api/framework/db"

	"gorm.io/gorm"
)

// 提现记录
type Transfer struct {
	db.BaseModel
	UserID      uint64 `json:"user_id" gorm:"column:user_id;type:int;not null;comment:用户ID"`
	Code        string `json:"code" gorm:"column:code;type:varchar(50);default:'';comment:提现单号"`
	Type        uint8  `json:"type" gorm:"column:type;type:int;not null;comment:收款类型，1微信，2支付宝，3银行卡"`
	Phone       string `json:"phone" gorm:"column:phone;type:varchar(50);default:'';comment:收款手机号"`
	Name        string `json:"name" gorm:"column:name;type:varchar(50);default:'';comment:收款人姓名"`
	Account     string `json:"account" gorm:"column:account;type:varchar(50);default:'';comment:收款帐号"`
	Idcard      string `json:"idcard" gorm:"column:idcard;type:varchar(50);default:'';comment:身份证号"`
	Status      uint8  `json:"status" gorm:"column:status;type:int;not null;comment:状态，0失败,1待审核,2已审核,3已打款"`
	AuditRemark string `json:"audit_remark" gorm:"column:audit_remark;type:varchar(255);default:'';comment:审核备注"`
	Amount      uint64 `json:"amount" gorm:"column:amount;type:int;not null;comment:提现金额(单位：分)"`
}

// 表名
func (Transfer) TableName() string {
	return "transfer"
}

// 创建提现记录
func (e Transfer) Create(database *db.DB) (uint64, error) {
	// 开启事务
	tx := database.Begin()

	// 更新用户余额
	amount := e.Amount / 100 // 转换为元
	errUser := tx.Model(&Users{}).Where("id = ?", e.UserID).Update("balance", gorm.Expr("balance - ?", amount)).Error
	if errUser != nil {
		// 回滚事务
		tx.Rollback()
		return 0, errUser
	}

	// 创建提现申请
	err := tx.Create(&e).Error
	if err != nil {
		// 回滚事务
		tx.Rollback()
		return 0, err
	}

	// 提交事务
	tx.Commit()
	return e.ID, err
}

// 根据UserID分页查询提现记录
func (t Transfer) GetTransferByUserId(database *db.DB, userId uint64, page, size int) ([]Transfer, error) {
	var list []Transfer
	if page <= 0 {
		page = 1
	}
	if size <= 0 {
		size = 10
	}
	err := database.Model(&t).Where("user_id = ?", userId).Offset((page - 1) * size).Limit(size).Find(&list).Error
	return list, err
}
